*** Unlink code *************************************************************
Unlink code to make free space

--/---- unlink Terra/Celes magic learning at level-up
C0/A184 80 00           BRA $A186       Terra's magic learning
C0/A188 80 00           BRA $A18A       Cele's magic learning
--/---- unlink learning of spells at end of battle
C2/5E6F 80 01           BRA $5E72       optimized NOP           
C2/5E71 EA              NOP
--/---- unlink Terra/Celes natural learning of spells after battle
C2/61FC 60              RTS

*** Cursed Shield - JSR *****************************************************
Check for cursed shield exchange at end of battle

--/---- Init
C2/5FEF DA              PHX
C2/5FF0 A0 06 00        LDY #$0006      number of items to check
--/---- Check for item
C2/5FF3 BD 1F 16        LDA $161F,X     equipped item
C2/5FF6 C9 66           CMP #$66        cursed shield
C2/5FF8 D0 0E           BNE $6008       get next item if not
--/---- check cursed shield dispel chance
C2/5FFA 20 14 62        JSR $6214       calculate dispel chance
C2/5FFD B0 09           BCS $6008       skip if not dispeled
--/---- change cursed shield with paladin shield
C2/5FFF A9 01           LDA #$01
C2/6001 04 F0           TSB $F0
C2/6003 A9 67           LDA #$67
C2/6005 9D 1F 16        STA $161F,X     replace cursed shield with paladin shield
--/---- get next item
C2/6008 E8              INX             get next item
C2/6009 88              DEY             counter of number of items
C2/600A D0 E7           BNE $5FF3       check all equipped items
--/---- exit
C2/600C FA              PLX
C2/600D 60              RTS

*** Equipped spell - JSR ****************************************************
Discovery if spell is equipped
$1CF8 A character ID (input)
$1CF9 A spell to check (input)

--/---- get character offset                        
C2/600E AD F8 1C        LDA $1CF8       character ID
C2/6011 EB              XBA
C2/6012 A9 25           LDA #$25        character data block size
C2/6014 20 0B 62        JSR $620B       X = A * B
C2/6017 9B              TXY             save character data offset
--/---- check equipped esper
C2/6018 B9 1E 16        LDA $161E,Y     equipped esper
C2/601B C9 FF           CMP #$FF        is it empty?
C2/601D F0 1E           BEQ $603D       skip esper check
--/     get esper offset
C2/601F EB              XBA
C2/6020 A9 0B           LDA #$0B        esper data block size
C2/6022 20 0B 62        JSR $620B       X = A * B
--/     check esper spells
C2/6025 A9 05           LDA #$05        counter for numbers of spells
C2/6027 48              PHA             save counter
C2/6028 BF 00 6E D8     LDA $D86E00,X   learn rate
C2/602C F0 09           BEQ $6037       try next spell if null
C2/602E BF 01 6E D8     LDA $D86E01,X   spell taught
C2/6032 CD F9 1C        CMP $1CF9       spell to check
C2/6035 F0 2D           BEQ $6064       exit with spell found
--/     verify all remaining spells
C2/6037 E8              INX
C2/6038 E8              INX
C2/6039 68              PLA             restore counter
C2/603A 3A              DEC
C2/603B D0 EA           BNE $6027       try next spell
--/---- check equipment spells
C2/603D A9 06           LDA #$06        counter for number of items
C2/603F 48              PHA             save counter by now
C2/6040 B9 1F 16        LDA $161F,Y     equipped item
C2/6043 C9 FF           CMP #$FF        is empty?
C2/6045 F0 15           BEQ $605C       try next equipped item
--/     get equipment offset
C2/6047 EB              XBA
C2/6048 A9 1E           LDA #$1E        equipment data block size
C2/604A 20 0B 62        JSR $620B       X = A * B
--/     get spell from equipment
C2/604D BF 03 50 D8     LDA $D85003,X   learn rate
C2/6051 F0 09           BEQ $605C       skip if learn rate is null
C2/6053 BF 04 50 D8     LDA $D85004,X   spell item teaches
C2/6057 CD F9 1C        CMP $1CF9       searched spell
C2/605A F0 08           BEQ $6064       exit with spell found
--/     try all remaining items                         
C2/605C C8              INY
C2/605D 68              PLA
C2/605E 3A              DEC
C2/605F D0 DE           BNE $603F       try all items
--/---- Exit without spell found
C2/6061 A9 00           LDA #$00
C2/6063 60              RTS
--/---- Exit with spell found        
C2/6064 68              PLA
C2/6065 A9 FF           LDA #$FF
C2/6067 60              RTS
        
*** equipped spell - JSL ****************************************************
discovery if spell is equipped
JSL version of C2/600E with initialization

--/---- Init
C2/61FD DA              PHX
C2/61FE 5A              PHY
C2/61FF 08              PHP
C2/6200 C2 10           REP #$10        set X,Y as 16-bit
C2/6202 E2 20           SEP #$20        set A as 8-bit
--/---- Caller
C2/6204 20 0E 60        JSR $600E       discovery if spell is equipped
--/---- Exit
C2/6207 28              PLP
C2/6208 7A              PLY
C2/6209 FA              PLX
C2/620A 6B              RTL

*** multiply function - JSR *************************************************
multiply low A and high A. store result in X

C2/620B 20 81 47        JSR $4781       multiply A by B
C2/620E C2 20           REP #$20        set A as 16-bit
C2/6210 AA              TAX             store result in X
C2/6211 E2 20           SEP #$20        set A as 8-bit
C2/6213 60              RTS

*** dispel chance - JSR *****************************************************
calculate chance of dispel of cursed shield

C2/6214 20 5A 4B        JSR $4B5A       random number between [0,255]
C2/6217 C9 02           CMP #$02        dispel chance
C2/6219 60              RTS

*** spell availability - field only - JSR ***********************************
Discovery if spell is available (field only)

C3/50A2 85 E0           STA $E0         save spell ID
C3/50A4 8D F9 1C        STA $1CF9       save spell ID (JSL function)
C3/50A7 20 DD 4E        JSR $4EDD       set Y as character offset
C3/50AA B9 00 00        LDA $0000,Y     get character ID
C3/50AD 8D F8 1C        STA $1CF8       save character ID (JSL function)
C3/50B0 22 FD 61 C2     JSL $C261FD     discovery if spell is equipped
C3/50B4 60              RTS

*** menu setup - combat only - JSR ******************************************
init combat menu for summon, magic and lore (sml)

--/---- init
C2/568D DA              PHX             save entity index
C2/568E 08              PHP
C2/568F C2 10           REP #$10        set X,Y as 16-bit
--/---- setup of variables for posterior use: X = entity index, Y = character index
C2/5691 BC 2C 30        LDY $302C,X
C2/5694 84 F2           STY $F2         menu pointer: start of sml
C2/5696 BC 10 30        LDY $3010,X     Y = character data offset
C2/5699 B9 00 16        LDA $1600,Y     
C2/569C 8D F8 1C        STA $1CF8       character ID (JSL function)
C2/569F 64 F6           STZ $F6         counter of number of magic spells
C2/56A1 B9 1E 16        LDA $161E,Y     
C2/56A4 85 F7           STA $F7         esper ID
C2/56A6 BD 45 3C        LDA $3C45,X
C2/56A9 85 F8           STA $F8         relic effects 2 bitfield
--/---- changes in sml menu
C2/56AB 22 E4 56 C2     JSL $C256E4     nulls all menu items
C2/56AF 22 D0 56 C2     JSL $C256D0     set summon item
C2/56B3 22 B5 50 C3     JSL $C350B5     set magic items
C2/56B7 22 96 A1 C0     JSL $C0A196     set lore items
--/---- clean up and exit                        
C2/56BB 28              PLP 
C2/56BC FA              PLX 
C2/56BD A5 F6           LDA $F6         counter of number of spells
C2/56BF 9D F8 3C        STA $3CF8,X     save counter
C2/56C2 A5 F7           LDA $F7
C2/56C4 9D 44 33        STA $3344,X     save equipped esper
C2/56C7 A9 02           LDA #$02
C2/56C9 A8              TAY
C2/56CA B1 F2           LDA ($F2),Y     get aiming byte for summon
C2/56CC 9D 45 33        STA $3345,X     save aiming
C2/56CF 60              RTS

*** setup summon item - JSL *************************************************
setup summon item (esper)

C2/56D0 7B              TDC
C2/56D1 A8              TAY
C2/56D2 8C FA 1C        STY $1CFA       menu entry
C2/56D5 A5 F7           LDA $F7         esper ID
C2/56D7 8D FC 1C        STA $1CFC       command index
C2/56DA A9 36           LDA #$36        start of summons index
C2/56DC 8D FD 1C        STA $1CFD       start index (general spells)
C2/56DF 22 FC 56 C2     JSL $C256FC     set menu entry
C2/56E3 6B              RTL

*** nulls all menu items - JSL **********************************************
nulls all items in sml menus

--/---- init
C2/56E4 A2 4F 00        LDX #$004F      size of menu entry: 1 summon + 54 magic + 24 lores = 79
C2/56E7 7B              TDC
C2/56E8 A8              TAY             start of menu entry: zero
--/---- nulls menu entry
C2/56E9 A9 FF           LDA #$FF
C2/56EB 91 F2           STA ($F2),Y     spell index
C2/56ED C8              INY
C2/56EE A9 00           LDA #$00
C2/56F0 91 F2           STA ($F2),Y     unknow
C2/56F2 C8              INY
C2/56F3 C8              INY
C2/56F4 7B              TDC
C2/56F5 91 F2           STA ($F2),Y     spell cost
C2/56F7 C8              INY
C2/56F8 CA              DEX
C2/56F9 D0 EE           BNE $56E9       repeat for all entries
--/---- exit
C2/56FB 6B              RTL
                        
*** setup menu entry - JSL **************************************************
setup menu entry

--/---- init
C2/56FC AC FA 1C        LDY $1CFA       menu entry
--/---- setup of entry
C2/56FF AD FC 1C        LDA $1CFC       
C2/5702 91 F2           STA ($F2),Y     command index
C2/5704 C8              INY
C2/5705 C8              INY
C2/5706 18              CLC
C2/5707 6D FD 1C        ADC $1CFD       start of spell index for command
C2/570A 20 23 57        JSR $5723       get aimming (A) and spell cost (B)
C2/570D 91 F2           STA ($F2),Y     aiming byte
C2/570F C8              INY
C2/5710 EB              XBA
C2/5711 20 36 57        JSR $5736       adjust mp cost (gold harpian/economizer)
C2/5714 91 F2           STA ($F2),Y     mp cost
C2/5716 C8              INY
C2/5717 8C FA 1C        STY $1CFA       set next menu entry
C2/571A 6B              RTL                

*** setup magic items - JSL *************************************************
setup magic items

--/---- init
C3/50B5 7B              TDC
C3/50B6 AA              TAX             spell counter
C3/50B7 8D FD 1C        STA $1CFD       block start
C3/50BA A0 04 00        LDY #$0004      menu index
C3/50BD 8C FA 1C        STY $1CFA       start menu entry
--/---- search
C3/50C0 8A              TXA
C3/50C1 8D F9 1C        STA $1CF9       spell id to check
C3/50C4 8D FC 1C        STA $1CFC       command index
C3/50C7 22 FD 61 C2     JSL $C261FD     is the spell equipped?
C3/50CB C9 FF           CMP #$FF
C3/50CD D0 06           BNE $50D5       next spell to check
--/---- set entry
C3/50CF 22 FC 56 C2     JSL $C256FC     set menu entry
C3/50D3 E6 F6           INC $F6         total number of spells
C3/50D5 E8              INX
C3/50D6 E0 36 00        CPX #$0036      max entry of magic items
C3/50D9 D0 E5           BNE $50C0       loop
--/---- exit
C3/50DB 6B              RTL

*** setup lore items - JSL ***************************************************

--/---- init
C0/A196 7B              TDC
C0/A197 AA              TAX
C0/A198 A0 DC 00        LDY #$00DC      lore menu entry
C0/A19B 8C FA 1C        STY $1CFA
C0/A19E 9C FC 1C        STZ $1CFC       lore index (command index)
C0/A1A1 A9 8B           LDA #$8B        lore index (general spells table)
C0/A1A3 8D FD 1C        STA $1CFD
--/---- loop
C0/A1A6 BD 29 1D        LDA $1D29,X
C0/A1A9 20 B3 A1        JSR $A1B3       set lore bitfield
C0/A1AC E8              INX
C0/A1AD E0 03 00        CPX #$0003
C0/A1B0 90 F4           BCC $A1A6
--/---- exit
C0/A1B2 6B              RTL
                        
*** add lore bitfield - JSR **************************************************
          
--/---- init
C0/A1B3 DA              PHX
C0/A1B4 A2 08 00        LDX #$0008
C0/A1B7 8D FE 1C        STA $1CFE       temporary bitfield
--/---- bitfield check                        
C0/A1BA 4E FE 1C        LSR $1CFE
C0/A1BD 90 04           BCC $A1C3
C0/A1BF 22 FC 56 C2     JSL $C256FC     setup menu entry
C0/A1C3 EE FC 1C        INC $1CFC
C0/A1C6 CA              DEX
C0/A1C7 D0 F1           BNE $A1BA       loop
--/---- exit
C0/A1C9 FA              PLX
C0/A1CA 60              RTS

*** set espher menu **********************************************************
set espher menu for Gogo

C3/4D73 A9 20           LDA #$20        always enable espher menu for Gogo

*** discovery mp cost ********************************************************
discovery mp cost for spell

--/---- init
C2/4F08 DA              PHX
C2/4F09 08              PHP 
C2/4F0A 7B              TDC             clear A and B
C2/4F0B BD 45 3C        LDA $3C45,X     
C2/4F0E 85 F8           STA $F8         relic effects 2 bitfield
--/---- unknow
C2/4F10 A9 40           LDA #$40
C2/4F12 14 B1           TRB $B1
C2/4F14 D0 25           BNE $4F3B       exit with zero
--/---- null magic cost if not summon, lore, magic or x-magic
C2/4F16 AD 7A 3A        LDA $3A7A       command ID
C2/4F19 C9 19           CMP #$19        summon
C2/4F1B F0 0C           BEQ $4F29       
C2/4F1D C9 0C           CMP #$0C        lore
C2/4F1F F0 08           BEQ $4F29
C2/4F21 C9 02           CMP #$02        magic
C2/4F23 F0 04           BEQ $4F29       
C2/4F25 C9 17           CMP #$17        x-magic
C2/4F27 D0 12           BNE $4F3B       exit with zero if not one of four commands
--/---- get spell cost
C2/4F29 C2 10           REP #$10        set 16-bit X and Y
C2/4F2B AD 7B 3A        LDA $3A7B       spell id?
C2/4F2E 20 23 57        JSR $5723       get aiming (A) and spell cost (B)
C2/4F31 EB              XBA             get spell cost
--/---- adjust mp cost for characters
C2/4F32 E0 08 00        CPX #$0008      is a monster attack?
C2/4F35 B0 03           BCS $4F3A       skip if it is
C2/4F37 20 36 57        JSR $5736       adjust mp cost (gold harpian/economizer)
--/---- exit
C2/4F3A EB              XBA 
C2/4F3B EB              XBA 
C2/4F3C 28              PLP 
C2/4F3D FA              PLX 
C2/4F3E 60              RTS 

